#include <list>

/* Blog 类是主类，与之关联着多个 Observer 类。 Blog 类发生变化，会通过 Notify() 所有的观察者；观察者会通过 Update() 做相应的处理
 * 类似于 大V 和 粉丝 的关系。粉丝就是观察者，大V的动态粉丝可以实时得到
 */

//观察者
class Observer  
{
  public:
    Observer() {}
    virtual ~Observer() {}
    virtual void Update() {} 
};

//博客
class Blog  
{
  public:
    Blog() {}
    virtual ~Blog() {}
    void Attach(Observer *observer) { m_observers.push_back(observer); }
    void Remove(Observer *observer) { m_observers.remove(observer); }
    void Notify() //通知观察者
    {
      std::list<Observer* >::iterator iter = m_observers.begin();
      for(; iter != m_observers.end(); iter++)
	(*iter)->Update();
    }
    virtual void SetStatus(std::string s) { m_status = s; } //设置状态
    virtual std::string GetStatus() { return m_status; }    //获得状态
  
  private:
    std::list<Observer* > m_observers; //观察者链表
  
  protected:
    std::string m_status; //状态
};

